package com.example.administrator.caigou51.util;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;

import com.ab.util.AbViewUtil;
import com.example.administrator.caigou51.R;
import com.example.administrator.caigou51.global.App;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;

public class ImageUtil {


    public static DisplayImageOptions OptionsNormalRadius() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.white) //设置图片在下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.white)//设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.white)  //设置图片加载/解码过程中错误时候显示的图片
                .cacheInMemory(true)//设置下载的图片是否缓存在内存中
                .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
                .cacheOnDisk(true)
                .considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
                        //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
                        //设置图片加入缓存前，对bitmap进行设置
                        //.preProcessor(BitmapProcessor preProcessor)
                .resetViewBeforeLoading(true)//设置图片在下载前是否重置，复位
                .displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角，弧度为多少
                        //.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
                .build();//构建完成
        return options;
    }

    /**
     * 自定義圓角
     *
     * @param size 弧度
     * @return
     */
    public static DisplayImageOptions OptionsNormalRadiusNum(int size) {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.white) //设置图片在下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.white)//设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.white)  //设置图片加载/解码过程中错误时候显示的图片
                .cacheInMemory(true)//设置下载的图片是否缓存在内存中
                .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
                .cacheOnDisk(true)
                .considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
                        //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
                        //设置图片加入缓存前，对bitmap进行设置
                        //.preProcessor(BitmapProcessor preProcessor)
                .resetViewBeforeLoading(true)//设置图片在下载前是否重置，复位
                .displayer(new RoundedBitmapDisplayer(size))//是否设置为圆角，弧度为多少
                        //.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
                .build();//构建完成
        return options;
    }

    public static File BitmapToFile(Bitmap b) {
        File file = null;
        if (b != null) {
            Random random = new Random();

            FileOutputStream fos = null;
            String SavePath = Environment.getExternalStorageDirectory().toString() + "/DCIM/ScreenImages/";
            try {
                File path = new File(SavePath);
                String filename = SavePath + "Bitmap" + random.nextInt(10000) +
                        System.currentTimeMillis() + ".jpg";
                   /* String filename = SavePath+"Bitmap"+random.nextInt(10000)+
                             DateUtil.getStringByFormat(System.currentTimeMillis(), DateUtil.dateFormatYMDHMS) + ".png";*/
                if (!path.exists()) {
                    path.mkdirs();
                }
                fos = new FileOutputStream(filename);
                ;
                b.compress(CompressFormat.JPEG, 90, fos);
                file = new File(filename);
                //sendBroadCaseRemountSDcard(file);
            } catch (IOException ex) {
                // MINI_THUMBNAIL not exists, ignore the exception and generate one.
            } finally {
                if (fos != null) {
                    try {
                        fos.close();
                    } catch (IOException ex) {
                    }
                }
            }
        }
        return file;
    }

    public static File BitmapToFile50(Bitmap b, String floderPath) {
        File file = null;
        String SavePath = Environment.getExternalStorageDirectory().toString() + "/DCIM/ScreenImages/";
        ;
        if (floderPath != null) {
            SavePath = floderPath;
        }
        if (b != null) {
            FileOutputStream fos = null;

            try {
                File path = new File(SavePath);
                // String filename = SavePath+File.separator+"Bitmap"+ DateUtil.getStringByFormat(System.currentTimeMillis(), DateUtil.dateFormatYMDHMS) + ".png";
                String filename = SavePath + File.separator + "Bitmap" + System.currentTimeMillis() + ".jpg";
                if (!path.exists()) {
                    path.mkdirs();
                }
                fos = new FileOutputStream(filename);
                ;
                b.compress(CompressFormat.JPEG, 60, fos);
                file = new File(filename);
            } catch (IOException ex) {
                // MINI_THUMBNAIL not exists, ignore the exception and generate one.
            } finally {
                if (fos != null) {
                    try {
                        fos.close();
                    } catch (IOException ex) {
                    }
                }
            }
        }
        return file;
    }

    public static File BitmapToFile(Bitmap b, String floderPath) {
        File file = null;
        if (b != null) {
            FileOutputStream fos = null;
            String SavePath = floderPath;
            try {
                File path = new File(SavePath);
                // String filename = SavePath+File.separator+"Bitmap"+ DateUtil.getStringByFormat(System.currentTimeMillis(), DateUtil.dateFormatYMDHMS) + ".png";
                String filename = SavePath + File.separator + "Bitmap" + System.currentTimeMillis() + ".jpg";
                if (!path.exists()) {
                    path.mkdirs();
                }
                fos = new FileOutputStream(filename);
                ;
                b.compress(CompressFormat.JPEG, 90, fos);
                file = new File(filename);
            } catch (IOException ex) {
                // MINI_THUMBNAIL not exists, ignore the exception and generate one.
            } finally {
                if (fos != null) {
                    try {
                        fos.close();
                    } catch (IOException ex) {
                    }
                }
            }
        }
        return file;
    }

    public static File BitmapToFileNoSave(Bitmap b) {
        File file = null;
        if (b != null) {
            FileOutputStream fos = null;
            String SavePath = Environment.getExternalStorageDirectory().toString() + "/DCIM/ScreenImages/";
            try {
                File path = new File(SavePath);
                //  String filename = SavePath+"Bitmap"+DateUtil.getStringByFormat(System.currentTimeMillis(), DateUtil.dateFormatYMDHMS);
                String filename = SavePath + "Bitmap" + System.currentTimeMillis()+".png";
                if (!path.exists()) {
                    path.mkdirs();
                }
                fos = new FileOutputStream(filename);

                Bitmap mTempBitmap=b.copy(Bitmap.Config.ARGB_8888,true);

                mTempBitmap.compress(CompressFormat.PNG, 90, fos);
                file = new File(filename);
            } catch (IOException ex) {
              //  MobclickAgent.reportError(App.getInstance(), "BitmapToFileNoSave catch" + ex.getCause());
                ex.printStackTrace();
                // MINI_THUMBNAIL not exists, ignore the exception and generate one.
            } finally {
                if (fos != null) {
                    try {
                        fos.close();
                    } catch (IOException ex) {
                    }
                }
            }
        } else {

          //  MobclickAgent.reportError(App.getInstance(), "BitmapToFileNoSave Bitmap NUll");
        }
        return file;
    }

    public static DisplayImageOptions OptionsNormalRadius18dp() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.default_goods) //设置图片在下载期间显示的图片
                .showImageForEmptyUri(R.drawable.default_goods)//设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.drawable.default_goods)  //设置图片加载/解码过程中错误时候显示的图片
                .cacheInMemory(true)//设置下载的图片是否缓存在内存中
                .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
                .cacheOnDisk(true)
                .considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
                        //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
                        //设置图片加入缓存前，对bitmap进行设置
                        //.preProcessor(BitmapProcessor preProcessor)
                .resetViewBeforeLoading(true)//设置图片在下载前是否重置，复位
                .displayer(new RoundedBitmapDisplayer(AbViewUtil.scaleValue(App.getInstance().getApplicationContext(),16)))//是否设置为圆角，弧度为多少
                        //.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
                .build();//构建完成
        return options;
    }


    public static DisplayImageOptions OptionsNormalNotCacheInMemory() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.white) //设置图片在下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.white)//设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.white)  //设置图片加载/解码过程中错误时候显示的图片
                .cacheInMemory(false)//设置下载的图片是否缓存在内存中
                .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
                .cacheOnDisk(true)
                .considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
                        //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
                        //设置图片加入缓存前，对bitmap进行设置
                        //.preProcessor(BitmapProcessor preProcessor)
                .resetViewBeforeLoading(true)//设置图片在下载前是否重置，复位
                        //.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
                .build();//构建完成
        return options;
    }

    public static DisplayImageOptions OptionsNormal() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.white) //设置图片在下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.white)//设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.white)  //设置图片加载/解码过程中错误时候显示的图片
                .cacheInMemory(true)//设置下载的图片是否缓存在内存中
                .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
                .cacheOnDisk(true)
                .considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
                        //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
                        //设置图片加入缓存前，对bitmap进行设置
                        //.preProcessor(BitmapProcessor preProcessor)
                .resetViewBeforeLoading(true)//设置图片在下载前是否重置，复位
                        //.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
                .build();//构建完成
        return options;
    }
    //
    public static DisplayImageOptions OptionsActivity() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.default_goods) //设置图片在下载期间显示的图片
                .showImageForEmptyUri(R.drawable.default_goods)//设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.drawable.default_goods)  //设置图片加载/解码过程中错误时候显示的图片
                .cacheInMemory(true)//设置下载的图片是否缓存在内存中
                .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
                .cacheOnDisk(true)
                .considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
                        //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
                        //设置图片加入缓存前，对bitmap进行设置
                        //.preProcessor(BitmapProcessor preProcessor)
                .resetViewBeforeLoading(true)//设置图片在下载前是否重置，复位
                        //.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
                .build();//构建完成
        return options;
    }
    //默认图为购物车
    public static DisplayImageOptions CartOptions() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.white) //设置图片在下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.white)//设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.white)  //设置图片加载/解码过程中错误时候显示的图片
                .cacheInMemory(false)//设置下载的图片是否缓存在内存中
                .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
                .cacheOnDisk(true)
                .considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
                        //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
                        //设置图片加入缓存前，对bitmap进行设置
                        //.preProcessor(BitmapProcessor preProcessor)
                .resetViewBeforeLoading(true)//设置图片在下载前是否重置，复位
                        //.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
                .build();//构建完成
        return options;
    }

    public static DisplayImageOptions OptionsNormalRadius360_Head() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.white) //设置图片在下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.white)//设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.white)  //设置图片加载/解码过程中错误时候显示的图片
                .cacheInMemory(true)//设置下载的图片是否缓存在内存中
                .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
                .cacheOnDisk(true)
                .considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
//			.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以如何的编码方式显示  
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
                        //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
                        //设置图片加入缓存前，对bitmap进行设置
                        //.preProcessor(BitmapProcessor preProcessor)
                .resetViewBeforeLoading(false)//设置图片在下载前是否重置，复位

                .displayer(new RoundedBitmapDisplayer(360))//是否设置为圆角，弧度为多少
                        //.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
                .build();//构建完成
        return options;
    }

    //没有默认图，防止太闪
    public static DisplayImageOptions OptionsNormalRadius360_HeadNotDefault() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .cacheInMemory(true)//设置下载的图片是否缓存在内存中
                .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
                .cacheOnDisk(true)
                .considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
//			.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
                        //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
                        //设置图片加入缓存前，对bitmap进行设置
                        //.preProcessor(BitmapProcessor preProcessor)
                .resetViewBeforeLoading(false)//设置图片在下载前是否重置，复位

                .displayer(new RoundedBitmapDisplayer(360))//是否设置为圆角，弧度为多少
                        //.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
                .build();//构建完成
        return options;
    }

    public static DisplayImageOptions OptionsNormalRadius360_Gunion() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.white) //设置图片在下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.white)//设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.white)  //设置图片加载/解码过程中错误时候显示的图片
                .cacheInMemory(true)//设置下载的图片是否缓存在内存中
                .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
                .cacheOnDisk(true)
                .considerExifParams(true)  //是否考虑JPEG图像EXIF参数（旋转，翻转）
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
                        //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
                        //设置图片加入缓存前，对bitmap进行设置
                        //.preProcessor(BitmapProcessor preProcessor)
                .resetViewBeforeLoading(true)//设置图片在下载前是否重置，复位
                .displayer(new RoundedBitmapDisplayer(360))//是否设置为圆角，弧度为多少
                        //.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  ,这个会影响圆角
                .build();//构建完成
        return options;
    }

    //保存图片到系统相册，和指定路径
    public static void saveImageToGallery(Context context, Bitmap bmp) {
        // 首先保存图片
        File appDir = new File(Environment.getExternalStorageDirectory(), "Boohee");
        if (!appDir.exists()) {
            appDir.mkdir();
        }
        String fileName = System.currentTimeMillis() + ".jpg";
        File file = new File(appDir, fileName);
        try {
            FileOutputStream fos = new FileOutputStream(file);
            bmp.compress(CompressFormat.JPEG, 90, fos);
            fos.flush();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 其次把文件插入到系统图库
        try {
            MediaStore.Images.Media.insertImage(context.getContentResolver(),
                    file.getAbsolutePath(), fileName, null);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // 最后通知图库更新
       // sendBroadCaseRemountSDcard(file);
        // context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));
    }
}
